package com.dc.refactoring._2_在对象之间搬移特性._1_MoveMethod.newObject.methodOne;

/**
 * Description: 搬移函数_函数搬移
 * @author: gdc
 * @date: 2020/11/14
 * @version 1.0
 */
public class Account1 {
    private AccountType accountType;
    private int daysOverdrawn;

    //【2】将源函数的函数本体替换为简单的委托动作
    public double overdraftCharge() {
        // 【1】将 daysOverdrawn 作为参数传给目标函数
        return accountType.overdraftCharge(daysOverdrawn);
    }

    /**
     * 计算手续费，没有透支时为4.5，有透支时=4.5+透支金额
     */
    public double bankCharge() {
        double result = 4.5;
        if (daysOverdrawn > 0) {
            // 【3】根据是否删除源函数，确定找出源函数的所有调用者，并将这些调用重新定向
            result += overdraftCharge();
        }
        return result;
    }

}
